package com.objcat.servicegateway.filter;

import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.springframework.cloud.gateway.filter.GatewayFilter;
import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.cloud.gateway.filter.factory.AbstractGatewayFilterFactory;
import org.springframework.stereotype.Component;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;

import java.time.LocalDate;

/**
 * ClassName: LoginFilter
 *
 * Description: 因想引入security而注释于7/27下午
 * <p>
 * date: 2020/7/24 14:22
 *
 * @author misheep
 * @since JDK 1.8
 */
//@Slf4j
//@Component
//public class AuthGatewayFilterFactory extends AbstractGatewayFilterFactory<AuthGatewayFilterFactory.AuthConfig> {
//
//    public AuthGatewayFilterFactory() {
//        super(AuthConfig.class);
//    }
//
//    @Override
//    public GatewayFilter apply(AuthConfig config) {
//        return ((exchange, chain) -> {
//            log.info("鉴权拦截；date:{};config:{}", LocalDate.now(), config);
//            if (StringUtils.isEmpty(config.getToken())) {
//                return Mono.error(new Exception("请传入token"));
//            }
//            //then方法内的相当于aop的后置通知
//            return chain.filter(exchange).then(Mono.fromRunnable(()->{
//                //do sth
//            }));
//        });
//    }
//
//    @Data
//    //自定义config类，用来设置传入参数
//    static class AuthConfig {
//        /**
//         * 过滤类型
//         */
//        private String name;
//        private String token;
//
//        public String getName() {
//            return name;
//        }
//
//        public void setName(String name) {
//            this.name = name;
//        }
//
//        public String getToken() {
//            return token;
//        }
//
//        public void setToken(String token) {
//            this.token = token;
//        }
//    }
//}
